/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fi.uba.algo3.tp3.utils.dijkstra;

import java.util.ArrayList;
import fi.uba.algo3.tp3.utils.Punto;
import java.util.HashMap;
import java.util.List;

/**
 *
 * @author Ezequiel
 */
public class DijkstraGraph {

    ArrayList<Vertice> vertices;
    HashMap<Punto,Vertice> mapa;

    public DijkstraGraph() {
        vertices = new ArrayList<Vertice>();
        mapa = new HashMap<Punto, Vertice>();
    }

    /**
     * Todos los caminos tienen peso 1. De esta forma
     * Dijkstra calcula el camino mas corto en distancia.
     */
    public void restaurarPesoDeVertices() {
        for (Vertice v : vertices) {
            v.setPrevio(null);
            for (Camino e: v.getCaminos()) {
                e.setWeight(1);
            }
        }
    }

    public Vertice getVertice(Punto p) {
        return mapa.get(p);
    }

    public void addVertice(Vertice v) {
        //System.out.println("Agregando vertice");
        mapa.put(v.getPunto(), v);
        vertices.add(v);
    }

    public void vaciarGrafo() {
        mapa.clear();
        vertices.clear();
    }

    public List<Vertice> buscarCaminoMasCorto(Vertice desde, Vertice hasta) {
        restaurarPesoDeVertices();

        Dijkstra.calcularCamintosDesde(desde);

        List<Vertice> path = Dijkstra.menorCaminoHasta(hasta);

        return path;
    }

    public ArrayList<Vertice> getVertices() {
        return vertices;
    }
}
